% Libreboot 10-year anniversary
% Leah Rowe
% 12 December 2023

**This page was restored during August 2024, having been deleted earlier on
in 2024 - it was deleted as part of Libreboot's attempt to reconcile
differences with FSF/GNU, and much of this page is hostile to it (and has to be,
because it's focusing on the history of the Libreboot project, which has
historically been at odds with the FSF both socially, technically and
politically. The restored version is essentially identical, but has been
edited without altering any of the substance, and further information going
up to the month of August 2024 has been added at the end, which was not
available earlier on because... Libreboot has not yet invented time travel.**

Anyway, article time:

I'm very proud of the work done in Libreboot, both by myself and by others
who I work with. Many people make Libreboot possible, be it direct contributors
to the project, or the countless individuals and companies that work on all
the upstream projects used in Libreboot, projects like coreboot. I'm *very*
pleased now to announce the 10-year anniversary of the project.

I've decided to celebrate this event, by reflecting on the history of the
project during all these years. This article will go into depth about Libreboot
history. This article complements the pre-existing [contrib](../contrib.md)
page, which attempts to list the numerous contributions made by people to
Libreboot, over the years.

Introduction
============

The *Libreboot* project provides
[free, open source](https://writefreesoftware.org/) (*libre*) boot
firmware based on coreboot, replacing proprietary BIOS/UEFI firmware
on [specific Intel/AMD x86 and ARM based motherboards](../docs/hardware/),
including laptop and desktop computers. It initialises the hardware (e.g. memory
controller, CPU, peripherals) and starts a bootloader for your operating
system. [Linux](../docs/linux/) and [BSD](../docs/bsd/) are well-supported. The
goal of Libreboot is to provide well-tested binary releases of coreboot, along
with a fully automated build system, so as to make coreboot *easy to use* for
non-technical users, who believe in the principles of the [Free
Software](https://writefreesoftware.org/) movement - Libreboot is also more
secure and generally works more reliably than most vendor firmware.

As of today, Libreboot is 10 years old. The very first release was
Libreboot 20131212, released on 12 December 2013, and today
is 12 December 2023, exactly 10 years after that first release.

I actually wasn't sure what to do for this day, and I contemplated doing
nothing at all. In the end, I've decided to simply acknowledge it, and
reflect on the last 10 years of history. So, I spent all of today writing this
article, which is being published just before midnight, in the final hour
of 12 December 2023, relative to UK timezone which is (on this day) UTC+0000.

You can otherwise read the Libreboot git repositories, the contrib page, and
you can find historical articles all over the internet pertaining to the
subject. This article, that you are reading now, is written solely from my
own perspective, through my eyes, describing project history the way I see it,
since I've been here all this time.

Let's get started!

How did Libreboot start?
========================

*Why* did it start?
-------------------

I'm a free software activist. First and foremost, my focus is on using as much
Free Software *myself*, and I want to help other people achieve a level of
software freedom themselves. Many people reading this article today will know
that Libreboot no longer strictly aligns to FSF policy, but I still very much
believe in the ideology behind it. I merely apply it in different, more
[pragmatic](policy.md) ways - but this page is about the history of the project,
so I have to put myself in the headspace I was in, during each development year
relative to when Libreboot started.

Early history
-------------

The name *Libreboot* actually existed from about February 2014 onward.
The *libreboot.org* domain name was registered on 26 January 2014. I initially
started Libreboot as a commercial project, then unnamed, hosted on my company
website (nowadays called [Minifree Ltd](https://minifree.org/)). I sell
computers with Libreboot preinstalled, but I started providing coreboot-based
services in mid-2013. People started noticing what I was doing around August
or so, in 2013. Back then, Libreboot did not exist, not even anything that I
later referred to as Libreboot, I just provided coreboot pre-compiled
and pre-flashed.

One of the people who noticed me, reported my company to the Free Software
Foundation who were, at that time, interested in providing a Libreboot-like
project. They approached *me*, asking if I'd like my company to be promoted,
if I complied with certain policies of theirs. Long story short, I was interested
and turned my work into a formalised project. I still remember who told the
FSF, but I won't say his name, for the sake of his privacy. It was Joshua Gay,
FSF's licensing and compliance manager, who initially contacted me, expressing
his own excitement about the prospect. Joshua is the one who initially reviewed
Libreboot for compliance, and worked with me on getting Minifree products to be
RYF-endorsed; RYF is the FSF's certification program, for companies selling
free software oriented hardware. Joshua also taught me a *lot* about licensing,
especially the pitfalls of the GPL when it comes to compliance. He taught me
what to watch out for. Many of Libreboot's practises today are still inspired
by his initial guidance, for which I remain grateful; he was an excellent
teacher.

When I first started this work, coreboot had already existed for 14 years,
having been founded in the year 1999 as LinuxBIOS, renaming to coreboot in
the mid-2000s. However, coreboot wasn't (and still isn't) made for end users.
Coreboot's infrastructure is intended for use by other developers, who work on
boot firmware. Nothing user-friendly (for regular non-technical users) existed.

When Libreboot started, the first goal was to solve *this* problem. Libreboot's
mission today is exactly the same as it was then: to provide free boot firmware
that normal people can easily use. Something that normal users don't have to
think about, that *Just Works*, with regular updates. Clean, simple
and professional, with clear documentation. Coreboot documentation today is
much better, but it was very poor quality in 2013 (MediaWiki site with lots
of errant pages, poorly organised).

It came with a twist: Libreboot initially complied with the FSF's own RYF
criteria, and the GNU FSDG (Free System Distribution Guidelines). Under this
policy, no binary blobs are allowed. I believed in it then, because in practise
it seemed like a good idea and didn't do any harm. It would later become a
liability, for reasons laid out in Libreboot's modern [Binary Blob Reduction
Policy](policy.md) - a policy that was enacted during November 2022, in the
Libreboot project. This meant that Libreboot could only support a small subset
of hardware from coreboot because, although it is nominally a free software
project, coreboot does require binary blobs on some boards. More on this later!

Since the project was nameless until February 2014, early promotion of my work
was talking only about my company and about the FSF endorsement of it; Minifree
used to be called Gluglug, hosted at `gluglug.org.uk` (you can check it
in the Wayback Machine. The shop itself was on `shop.gluglug.org.uk`). For
example, [this video](https://www.youtube.com/watch?v=08HKcH2GguE&t=1565s)
talked about the ThinkPad X60 running Libreboot 20131212, but I only
retroactively named that to Libreboot in February 2014, so that video is
talking about my company, which is where you could download my source tarballs
at the time.

2013-2014: early days
=====================

When Libreboot first started, it *only* provided very basic releases: pre
compiled ROM images, with source code, but there was no automated build system.
The [build system](../docs/maintain/) evolved over time.

The first releases of Libreboot supported only the ThinkPad X60. Later, T60
support and MacBook 2,1 support were added. This first year of the project
was spent on building solid infrastructure, specifically documentation and an
automated build system. The design of Libreboot revolves around scripts that
automatically download, patch, configure and then compile various codebases,
so you can think of it like a *coreboot distribution*; Libreboot's build
system is essentially a source-based package manager, for coreboot components.

The very first Libreboot releases only provided a *GNU GRUB* payload. The
GRUB bootloader had been adapted for coreboot many years before then, but there
weren't any ready-made coreboot images available that used it, and it wasn't
very well-developed for end users. GRUB is a lot more complex than many people
realise, containing a small kernel, shell, utilities, even its own subset of a
standard libc. It even has its own malloc functions, and it's quite decent. Then
there are *modules*, basically small programs that run inside GRUB. The GRUB
shell even has things like `cat` and `ls`, adapted for it. GRUB configuration
files behave similarly to BASH scripts, with similar syntax and overall logic
flow/style. It is an extremely configurable bootloader.

GRUB revolves around the shell, which is basically an extension of the Bash
shell, adapted for use in a Multiboot context. GRUB is the reference Multiboot
implementation, which boots Linux. Libreboot provides GRUB so that it can
directly boot Linux kernels. GRUB has many advanced features, such as GPG and
LUKS support, and it has support for virtually all of the major file systems in
use today.

Libreboot logo
--------------

Of note, though it doesn't fit anywhere else in the article, so I'll just say
it now:

I went on the GNU mailing lists during 2014, asking people to make a logo for
the project. Several people then emailed me their submissions. I finally picked
the logo design that Libreboot now uses, and has used since then. That design
was created by a person named Marcus Moeller, for use in the Libreboot project.

Why GRUB?
---------

Libreboot has always, at least on x86, preferred *GRUB* as a coreboot payload.

Libreboot's initial no-binary-blob policy meant that SeaBIOS could not be used.
SeaBIOS then was the most popular payload, and the default one in coreboot, at
least on x86. Although SeaBIOS is free software, it did not have a free video
BIOS back then. Coreboot's native video initialisation was developed at around
that time, for Intel video chipsets, providing a basic framebuffer, but no
video BIOS services, so operating systems like Windows could not boot (and they
still cannot, on most Libreboot setups).

Nowadays, SeaBIOS comes with a feature called SeaVGABIOS, which piggybacks off
of the coreboot framebuffer, providing a basic video BIOS and initialisation
on top of the coreboot framebuffer, but this capability did not exist
in 2013 when Libreboot started. So, SeaBIOS could not be used in Libreboot
then. Libreboot provided just the coreboot framebuffer, then loaded GRUB, which
then loaded Linux; Linux itself could interact with the coreboot framebuffer,
and the Intel video driver (`i915`) sets modes directly, so it doesn't need
BIOS INT10H or UEFI GOP services for video-related functions. In Linux, your
video drivers just write to a framebuffer directly in memory. No abstractions.
This feature, called KMS (Kernel Mode Setting) was later ported to the BSDs,
first made stable in 2016; that means, that when Libreboot first started, it
could only boot Linux.

Linux as a payload wasn't very well developed in practise, even though Linux
in flash was the original aim of the coreboot project, and the systems that
Libreboot supported in 2013 only had 2MB of flash, which could not fit Linux;
the Heads project did not exist either! However, GRUB could (and still can) fit
in such a tiny space. In fact, even to this day, a compressed GRUB payload
can be optimised to fit within 512KB, though the Libreboot version adds a few
additional modules so the compressed size in flash is about 600KB (at least for
configurations that were provided on 12 December 2023).

Tianocore did exist then, but Tianocore is bloat. It has always been policy not
to provide Tianocore, because of this. Code==bugs, and Tianocore is
extremely over-engineered; the UEFI specification is completely redundant,
because BSD and Linux kernels run on bare metal anyway (without making use of
any BIOS or UEFI services). Linux/BSD video drivers set modes directly, without
needing to use BIOS/UEFI-based services e.g. BIOS INT10H or UEFI GOP.

Other payloads weren't really suitable either, so: Libreboot provided GRUB
right from the start. GRUB provides a special build target for coreboot, where
GRUB provides all of its own drivers and runs on the bare metal, without relying
on abstractions such as BIOS or UEFI.

*GRUB* wasn't very useable either. Back then, it was basically assumed that if
you used the GRUB payload, you just had to reconfigure it in flash, every time
you wanted to boot another Linux distro, or otherwise manually boot from the
GRUB shell. This was in fact how GRUB was used. However, GRUB otherwise worked
perfectly, and had (still has) support for the coreboot framebuffer, and text
mode. It is the preferred payload, for our purposes. It was there and just
worked. Libreboot then spent a lot of time tweaking GRUB, configuring it so
that it is as user-friendly as possible, roughly matching the user experience
that is found on most BIOS/UEFI systems, at least for booting Linux and BSD.

Libreboot's innovation was that it made GRUB *user-friendly* as a payload.
Over time, GRUB was configured in clever ways. These days, Libreboot's GRUB
is well-configured and can auto-boot almost any Linux distribution. The way
it works is by systematically scanning for GRUB configurations on many different
partition layouts, including encrypted (LUKS), to then load a GRUB config
provided by the installed distro. GRUB also has a parser in it, that lets you
show ISOLINUX/SYSLINUX menus, converted on the fly for use with GRUB.
Nowadays, many UEFI-based distros also provide GRUB on installation media,
which means that many Linux distro installers come with GRUB, making
installers even easier to boot from Libreboot.

Libreboot's GRUB configuration is unique. Even with coreboot's earlier work,
nothing quite like Libreboot's GRUB config exists that pre-dated it. The way
Libreboot configures GRUB is extremely unique. Several other projects now exist
inspired by it, such as [Canoeboot](https://canoeboot.org/). GRUB also has
several flaws, but it mostly *Just Works*. Libreboot made it work *well*, for
the casual coreboot user.

With the Libreboot version of GRUB, you can normally use it intuitively, where
most users who are used to UEFI/BIOS systems can just use the GRUB payload,
without knowing much about it. In fact, many users are (to this day) still
surprised that they have GRUB in the flash. They install their favourite Linux
distro, unmodified, and it just boots, needing no manual intervention or
customisation whatsoever, so long as the distro provided a GRUB configuration
during installation. Libreboot did that!

The only real downside is that GRUB isn't very good at booting BSD systems,
though it does have BSD partition support and it has code tailed to specific
types of BSD kernels, but it usually cannot be relied upon; that said, GRUB
does have GELI support and can load a FreeBSD kernel. If configured properly,
it might work. However, Libreboot provides SeaBIOS these days and SeaBIOS is
what is recommended to boot BSD systems in Libreboot, where you would then
execute the bootloader provided by your BSD system.

Another benefit of using GRUB (as a payload) is that, when installing Linux,
you no longer need to install anything bootloader-related on your HDD/SSD.
Although excluding this usually requires re-configuring `grub.cfg` in flash,
Libreboot does provide this capability.

Automatic build system
----------------------

One of Libreboot's other main innovations, in addition to providing binary
releases, was to provide an automated *build system* interface. With it, the
user could run a few simple commands, to build entire sets of ROM images.

By contrast, configuring coreboot on your own has always been quite complicated.
The average user would look at coreboot and become overwhelmed. It's easy to
just run `make menuconfig` in coreboot, pick a board, come out of that and
type `make`, but this only gets you a very basic setup (with SeaBIOS), and this
assumes that no other components are needed e.g. extra firmware that coreboot
does not provide. Especially for more modern systems, there are *many* moving
parts that the user otherwise has to deal with, whereas Libreboot automates all
of it. Such automation *did not exist* anywhere, prior to Libreboot. The only
noteworthy exception would have been the Chromebook products, where Google
did(does) provide updates, but without so much community focus as Libreboot and
without quite the same user-accessible build system automation; their
infrastructure is designed so that vendors can sell more Chromebooks.

Libreboot takes everything needed for each board, auto-downloading,
auto-patching, auto-configuring and auto-building the various software
components. Nowadays, this automation is very sophisticated, and can be done
with only a single command per board.

During 2014, this automation was already established, though it wasn't as
well-developed then, and a lot of manual user intervention was still required;
in other words, it wasn't full automation. It was more like 5 commands instead
of 1; but coreboot was (still is) like 15+ commands, depending.

A lot of Libreboot users today can't easily appreciate how much easier Libreboot
makes everything for them, because of how entrenched it is, at least on what it
supports. There are *many* coreboot users today, who have only ever set it up
by way of Libreboot installation. Many such users are people who would never use
coreboot on their own. Libreboot's build system *just works*, to the extent
that people today even take it for granted. It works so well that you forget
it exists, which is the essence of all good user interface design.

Before 2014, nothing like Libreboot ever existed. Coreboot existed, but nothing
that is easy to use based on it. Nothing quite as developed as Libreboot, for
end users. Libreboot's main innovation was (and is) precisely this, that it
automates the process of building ROM images, and then provides releases.

*Everything* in Libreboot is automated, and that is the entire purpose of it, to
provide such automation. It's the same concept as a *Linux distribution*, but
in the context of boot firmware. A project like *Debian* automatically builds
many codebases from all over the internet, putting it all together to provide
an operating system that users can simply install. Libreboot applies that same
concept to *coreboot*, so it is a *coreboot distribution*.

Libreboot was the *first* coreboot distro ever, and today is still the most
popular one. Several similar projects now exist, inspired by the example that
Libreboot had set, all those years ago!

You can learn more about the build system by reading [lbmk
documentation](../docs/maintain/).

late 2014-2016: expansion
========================

Libreboot up until late 2014 was mainly a proof of concept. It *worked*, but
not well. The precursor of what became Libreboot's automated build system,
began development from early 2014 onward.

Almost all of 2014 was spent entirely on the build system, and on documentation,
without much additional focus on hardware support; I always knew then that it
would later expand, so I focused solely on the infrastructure.

GM45 hardware (e.g. ThinkPad X200)
---------------------------------

I was approached by another developer, named Steve Shenton, around October
of 2014. I'd expressed interest in the ThinkPad X200, as an upgrade to the X60
offering in Libreboot. Coreboot supported the X200 at that time, done by
coreboot developer Vladimir Serbinenko based on Nico Huber's work on the Roda
RK9.

The Intel Management Engine was the only issue. At that time, nothing
like `me_cleaner` (which strips out code from the ME, usually leaving only
the bringup code intact) existed. On the GM45 machines,
[Intel ME](https://en.wikipedia.org/wiki/Intel_Management_Engine)
is usually disabled on most vendors, but Lenovo provided it because their
machines came with Intel Gigabit Ethernet, which requires an Intel Flash
Descriptor and Gigabit Ethernet config in the flash; Intel's standard setup
here is to then provide the Intel ME, in two separate versions: a 1.5MB version
without [AMT](https://en.wikipedia.org/wiki/Intel_Active_Management_Technology),
and a 5MB version with AMT.

The X200 was always possible to use without Intel ME, because the ME only
handled AMT and [TPM](https://en.wikipedia.org/wiki/Trusted_Platform_Module) on
that platform, which are not required for boot, but
the only known way at that time was to flash a *descriptorless* setup, which
meant that you would lose use of the Intel Gigabit Ethernet. This didn't seem
all that useful for Libreboot users, who expect everything to just work.

Steve reverse engineered the Intel Flash Descriptor, finding disable bits in it
that put the Intel ME into a permanent reset loop. In this configuration, the
ME bootrom does not load any firmware from the flash. The full ME firmware
otherwise goes in the main boot flash, alongside the BIOS software (e.g.
coreboot). In Libreboot, the Intel ME firmware is excluded on GM45 hardware.

I worked with Steve between October 2014 to mid-January 2015. Steve provided
instructions for disabling the Intel ME in the ICH9M flash descriptor, and
wrote a proof of concept utility that would take a *factory* ROM image dump,
for instance X200 LenovoBIOS dump, and create a file containing just
the descriptor and Gigabit Ethernet config, but without the Intel ME. That
utility was called *ich9deblob*.

Under Steve's guidance, I wrote a utility that would *generate* an ICH9M
descriptor from scratch. I then studied the datasheets for Intel's gigabit NIC,
writing a tool to generate the Ethernet config from scratch. I had a new program
written by around mid-January 2015, and I called it *ich9gen*. You can
read about ich9gen and ich9deblob on
the [ich9utils](../docs/install/ich9utils.md) page. The ich9gen utility was
used to provide blobless configurations on the ThinkPad X200 machines.

Based on this, and extensive amounts of documentation was written during the
same period, I then provided the Libreboot 20150124 release on 24 January 2015.
It added ThinkPad X200, X200S and X200 Tablet support.

2015: T400, T500, W500... R400
------------------------

Coreboot lacked supported for other GM45 thinkpads at this time, when X200
support was first added to Libreboot. Testing was later done on these other
machines. In particular, Timothy Pearson (of Raptor Engineering) added support
for switchable graphics, enabling video initialisation on versions of these
boards that have both Intel and AMD graphics. Without such support, no video
init was available unless you used a board that only had the Intel GPU. A
hardware mux is present on the ones with AMD graphics, enabling you to still
use just the Intel one, or switch to the AMD one.

So, during 2015, Libreboot added support for many newer laptops. ASUS KCMA-D8
and KGPE-D16 support was also first added to Libreboot during this year,
worked on by Timothy Pearson and integrated into Libreboot.

2015-2016: Major build system improvements
------------------------------------------

The build system was heavily improved during this period, improving the
automation and greatly expanding the supported features.

During this time, Paul Kocialkowski got involved with the project and used
his expertise to integrate Depthcharge as a payload. This is the bootloader
used on Google Chromebooks; he has previously worked on Replicant and several
other projects. The ASUS Chromebook C201 was added during this time
as a proof of concept, which is a Rockchip RK3288-based machine (ARM). SeaBIOS
wasn't available, nor was GRUB(at that time, for ARM). Libreboot today uses
U-Boot (adapted for use as a coreboot payload) on ARM machines, but that work
hadn't been done in 2016.

In general, Libreboot's first years (2014-2016) were spent writing extensive
amounts of end user documentation, and implementing the automated build system,
so as to support many machines. Libreboot's design is kept as efficient as
possible, so that it can run on very inexpensive infrastructure, with many more
releases; the main focus has always been to further extend the number of
machines that are supported, and to reduce the amount of maintenance required,
so I try to keep everything very simple.

Several other desktop boards were also added during this period, such as
the Gigabyte GA-G41M-ES2L board that was ported to coreboot by Damien Zammit.
He was compensated for his work; I paid him 4000 AUD for the trouble. Arthur
Heymans contributed several ports aswell, and today still does extensive work
on coreboot - both Damien and Arthur left the Libreboot project, after its
departure from GNU (more on this next).

This period was a watershed moment in general, for the Libreboot project. Many
people contributed to the project, during this period. You can check
the [contrib](../contrib.md) page for a list of people, and check git logs.

2016: GNU Libreboot
===================

Yes. *That* is also covered here. Naturally, Libreboot was becoming very
popular and I looked for ways to extend that. Back in 2015 and most of 2016,
I saw GNU membership as a natural step for the project to take. Libreboot had
a mailing list at that time, hosted on the GNU Savannah infrastructure, so it
seemed only logical to give it a go.

Evaluation and accession
---------------------------

Libreboot was briefly a GNU project, between 14 April 2016 to 15 September 2016.
I had proposed this during the summer of 2015, and worked with the GNU Eval
team lead by Mike Gerwitz.

Libreboot's build system and documentation used a very peculiar design, which
did not fit well into GNU's design policies. GNU had several technical
requirements for projects, such as use of Texinfo files for documentation, to
be generated into HTML by a static site generator. At that time, Libreboot's
website was written in static HTML, manually. It did not use a static site
generator of any kind.

On the coding side of things, many GNU programs use things like GNU Autoconf
for configuration, in build systems, and GNU has a certain *coding style* that
is preferred. To speed up entry into GNU, many of the requirements were
overlooked since, ideologically speaking, Libreboot aligned with the GNU
Free System Distribution Guidelines (FSDG) at that time, so Libreboot officially
joined GNU on 14 April 2016, under the assumption that it would gradually
start integrating with the GNU infrastructure.

*Three* Libreboot releases were released, during its GNU membership, namely:
Libreboot 20160818, 20160902 and 20160907.

Initial outcomes
-------------

Libreboot's popularity reached great heights during this time, greatly expanding
and attracting many new developers. Joining GNU accelerated this further,
though it came with certain drawbacks.

At that time, I believed in the GNU FSDG policy, and I saw GNU membership as
beneficial to the Libreboot project, not because I was interested in GNU for
any technical merit; Libreboot is boot firmware, whereas GNU has always been
about providing an operating system with the libc and many useful applications.
Libreboot did not really fit into the GNU infrastructure, but it aligned with
the ideology both in theory and in practise, and the prestige of it at that time
would attract more help.

I later realised otherwise, regarding the ideology; more on this later, in
the sections about osboot, and the osboot/libreboot merge, and events after
that.

Regret
------

Anyway: during Libreboot's membership, I started to realise that many of the
technical requirements imposed on Libreboot were unworkable, especially the
GNU coding standards, and in general how a GNU project is supposed to be run,
which turned out to be quite inflexible for the Libreboot project. GNU projects
tend to be highly collaborative, with decisions taken on a collective level,
and not just on behalf of the given project, but with thought also given to
how it integrates with the rest of GNU; the assumption is that there would be a
complete GNU system, everything all integrated very tightly together. Libreboot
wasn't (and isn't) like that, because the knowledge is highly specialised and
it pertains to a lower level than GNU (that of the boot firmware).

RMS, a man who had no technical merit to lead the Libreboot project, began
trying to *tell me what to do*. I started noticing that the GNU project was not
run very democratically, or transparently either; as a maintainer, I had access
to the `gnu-prog-discuss` mailing list, which is otherwise unavailable to the
public, and I saw the true nature of it. Individual projects, even maintainers,
had little to no oversight or say in how RMS or the GNU Advisory Committee made
decisions, but they could impose policy on projects. In practise, *many*
projects ignore the leadership of RMS and the committee, and they don't use GNU's
stagnant infrastructure such as Savannah. Most modern GNU projects have their
own management, their own infrastructure and their own practises, where their
only connection to GNU is the prestige of the GNU brand name itself. However,
that mailing list existed, and RMS (plus others) used it to leverage other
GNU projects. Prior to joining, I saw it as a great and noble organisation, but
my experience as a maintainer within it showed me that it was actually just the
personal fiefdom of a very small group of people, lead by RMS.

I could begin to see a future very clearly where I was no longer
in control of the Libreboot project. I'll provide an example: one of the last
threads I saw, before being kicked off of the list due to Libreboot's
departure, was a thread started by RMS where he told all the GNU projects
that they should start implementing reproducible builds, in all of their build
systems; this is a noble goal in and of itself, but it was started based on the
whim of one man, who would not implement the policy himself. RMS has no coding
experience anymore, because he mostly stopped doing any real programming ever
since the 90s, yet he had the audacity to try to claim authority over my
project? [He does not even know how to install
Linux!](https://www.youtube.com/watch?v=umQL37AC_YM) - Libreboot's membership
was a gift to GNU, and I don't try to rub things in people's faces, but he
owned me a debt of gratitude. Instead, he showed me contempt. However, I cannot
reveal the emails due to privacy concerns (I would never publish without
consent).

Libreboot is a lifelong passion of mine. It's one of the best things I've ever
done, and I have no intention of ever letting it go, something I realise could
happen with GNU membership. There is *another* freedom that exists, namely the
freedom to say no. I reclaimed this freedom, by removing Libreboot from GNU.

I realised that if Libreboot stayed in GNU for too long, then I would start to
lose control over the project as it became more associated. I had been deciding
already, early into Libreboot's membership, whether to reverse the decision
and take Libreboot out of GNU, thereby making it an independent project again.
You could try to assert control by doing good work, but eventually everything
grows, and who will the other people who join answer to; you? No, I saw
definite coup possibility in the future. RMS could have put someone else in
charge, and I'd seem ungrateful if I resisted or challenged it, people would
side with him.

I know I'm right, and I don't regret the fact that Libreboot left GNU; I do
regret how it left, and I'll have more to say on this in the next section. I had
the wisdom then to know what might happen in the future. I'd seen it before,
with other projects (for example GnuTLS, whose founder and author did all the
work and later took it out of GNU - something that RMS tried to prevent, and
only failed by chance). I *did* initially offer for Libreboot to re-join GNU,
mostly because I felt regret about the *manner* in which it left, but not the
fact alone that it did leave. Again, more on this will be written in the next
sections. My re-join proposal was neither accepted nor rejected; RMS simply
ignored it, and did not respond. I offered for it to re-join because I felt bad
about everyone else I'd affected during its later departure, but I'd hoped RMS
would say no. So I gambled on it; making such an offer reliably absolved me of
any guilt, mitigating my past actions entirely, but he didn't have to accept
it, and he didn't. If he had accepted it, Libreboot in 2023 would be unrecognisable
today, at least compared to the Libreboot project that does now exist, in 2023.

So I thought at that point: was Libreboot's membership really worth it? I
concluded that it wasn't necessarily a bad idea, not a liability for the project,
at least in the short term. I basically continued running the project the same
way I always did, but under the GNU name, while being wary of my decision. I had
begun to contemplate whether I should remove Libreboot from the GNU orbit.

In retrospect, I believe Libreboot's membership was always doomed from the
start. The way I operate, and the way I think, is incompatible with their style
of leadership, and with the expectations put upon GNU projects. Actually, I
only half-expected that they'd even accept Libreboot, at the time. I didn't
even know it had become a GNU project, on the day it became one, which was 14
April 2016; I was quite preoccupied with many other things during that month,
and I only *noticed* RMS's acceptance email on the 18th of April in that year.
He just sent the email on a whim, and Libreboot had become part of GNU, just
like that - even in the days after the 14th, but before 18th, I had been
thinking about the changes that Mike Gerwitz wanted me to make first, which had
even been discussed during that time, only for RMS to sidestep all of it and
accept Libreboot early; yet another example of the power that he held.

Needless to say, I was stunned. And now, I will write about Libreboot's
subsequent exit from the GNU project:

Exit
----

Later, a member of the FSF staff got fired, who happened to be transgender, and
I had been friends with that person. I myself had only recently come out
as trans (I came out publicly as trans during May 2016), and I wasn't very
secure about myself at that time. Needless to stay, I wasn't very stable, and
I took the friend's firing personally. I publicly accused the FSF of firing
the person on discriminatory grounds, accusations which later turned out to be
false, for which I apologised, but this went on for about 6 months.

That incident alone wasn't solely my reason for removing Libreboot from GNU,
and I probably would have done so anyway, but it served as a sufficient
catalyst that motivated me into action, though the way I handled it was
regrettable. Rather regrettably, I went on an angry tirade against the entire
apparatus of the FSF and the GNU project, denouncing them both, an act which I
know now made no sense whatsoever, because only one person was responsible for
the firing; and even if my diatribes were justified, they did not belong on
the Libreboot website. I should have put them on a personal blog, not the
homepage of a major free/opensource software project that I'd poured 3 years
of blood, sweat and tears into. What I did, nearly destroyed the Libreboot
project.

Because of that incident, I announced on 16 September 2016 that Libreboot is
no longer part of GNU. GNU did not officially have a mechanism for projects
to *leave*, and that's still true to this day. It has an evaluation process
for projects to join, and then integrate with the GNU infrastructure. They *do*
have a tendency to list projects as *unmaintained* or *decommissioned* if no
longer developed within GNU, but they do not have language pertaining
to *active* projects that leave, that stay active.

GNU's response
--------------

Libreboot's decision to leave was not without precedent. GnuTLS also left, as
did Nano (Nano later re-joined), though GnuTLS's departure was never officially
acknowledged; it's still non-GNU to this day, but the GNU project still lists it
as an official member project. GNU initially did not accept Libreboot's
departure. The GNU Advisory Committee, under Stallman's leadership, went
around trying to find people who could take my place as leader of the project.
In other words: they had the goal of keeping GNU Libreboot going, despite my
intentions as leader of the project. I regarded this as their intent to create a
hostile fork of Libreboot, under the same name, and I still hold them to account
for it today, even if other actions that I did take were regrettable in the way
that I did them. They had no moral or technical authority over the project.

In the event, nobody else wanted to take my place under GNU auspices, and RMS
finally acknowledged Libreboot's departure, during January of 2017. At the time,
I wore this badge with pride. GnuTLS had left, but their leaving was never
officially acknowledged, and was in fact opposed by the GNU Advisory Committee;
it is even still listed today as a GNU project, when it has de facto not been
that way for many years. RMS published this acknowledgement, on the GNU
mailing lists, for everyone to see.

I still, to this day, believe that Libreboot's membership was flawed. It did not
need to join in the first place, regardless of ideology. It was already
thriving as an independent project, but GNU membership made no sense due
to the very nature of the project: as an aggregate of other codebases, it could
be *anything* at any given time, which would make auditing very difficult. It'd
be like Debian joining GNU, to become GNU Debian. GNU Debian GNU/Linux. This
may seem hilarious, in fact, but consider that Libreboot provides a modified
version of GRUB, which itself is a GNU project.

GNU Libreboot just didn't quite feel right, on any level, but this realisation
was only made after the fact. If there are infinite universes, ours is the only
one that had GNU Libreboot.

An *alternative* might have been to just provide a deblobbed coreboot in GNU,
which is something I also considered at the time, but that would have required
maintaining a full coreboot repository, merging and overseeing a lot more
patches from upstream, and diverging heavily. The way Libreboot's deblobbing
worked was that it just deleted the blobs, and (by way of configuration) avoided
all boards except those that could be booted entirely blob-free in the flash.
This method required far less maintenance - the original blob-free policy of
Libreboot has been continued, as of 2023, in a new project I maintain
called [Canoeboot](https://canoeboot.org/) - I'll have more to say about this,
and Libreboot's newer [Binary Blob Reduction Policy](policy.md), later in the
article.

2017-2021: Post-GNU years
=========================

GNU cuts Libreboot loose
--------------------------

Libreboot's departure from GNU came about 1 week after a big stable release,
the Libreboot 20160907 release. I pretty much burned out after that release,
especially during the *Librexit* saga (which is what I called Libreboot's
departure from GNU, in my head, at the time).

The Libreboot project pretty much ground to a halt, until around April or
May of 2017. I had a lot of other things going on in my life at the time,
especially transition-related (I was preparing financially for gender
reassignment surgery in Thailand, which was to be performed on me on 1
August 2018 - I did in fact go there and get it done, on that day, but I will
not talk about it further in this article).

In any case: tensions calmed, after January 2017 and the dust settled. I
remained angry, bitter in fact, but I did calm down after a while. I can look
back at these years now with pride; I did the right thing, even if I caused a
lot of trouble while doing it, trouble that I had to later correct, and atone
for. It's a bittersweet realisation, but it is what it is.

Apology to GNU
--------------

Alyssa Rosenzweig, who later founded the Panfrost project and nowadays works
on free graphics drivers for Asahi Linux, briefly joined the Libreboot project
during mid-2017. She had a stern talk with me, telling me the folly of my ways.
I'd already been reconsidering my actions, but her talks with me made me finally
see sense.

I learned by April 2017 that my allegations against the FSF were false. The
employee was fired on other grounds. Even if my allegations were true, my
public reaction to it was wholly inappropriate. I used my position then to
attack the entire FSF and GNU apparatus, when in reality the firing had only
been decided upon by one man, namely John Sullivan who was the FSF's
executive director. Even if my allegations were true, I did a lot of damage
to the reputation of the FSF and the GNU project, and to Libreboot, and although
it wasn't my intention at that time, it brought a lot of undue attention upon
the person in question, who only wanted privacy.

I felt bad about all of it, so I publicly recanted my allegations on 2
April 2017, and stepped down as leader of the project. You can read about
the event here:
<https://www.reddit.com/r/linux/comments/639ob1/libreboot_no_longer_opposes_the_gnu_project_or/>

Also of note: Alyssa contributed to Libreboot a custom-written static site
generator, converting its static HTML into Markdown files for documentation
on the website, then generating pages with Pandoc. This static site generator
is included in the original Libreboot git repository, and it later became the
basis for my own [Untitled Static Site Generator](https://untitled.vimuser.org/)
which libreboot.org now uses. Alyssa acted as a sort of spokesperson during
this period, acting in my place and I briefly gave her sysadmin privileges for
the Libreboot hosting infrastructure, during that year (2017), because she
was helping me improve my infrastructure - for example, she taught me how to
use Nginx, where I'd previously used lighttpd as Libreboot's web server.

And that is the greatest irony of all. One of my main concerns about Libreboot's
GNU membership was that I would lose control of the project, but I soon stepped
down and handed it over to other people, after its departure; I'll have more to
say about this, in later sections. I was absent from leadership during 2017
to 2021, though I retained exclusive control of the domain name and
infrastructure, while fully delegating all day to day development, maintenance
and user support to other people - I later took over the project again in 2021,
a topic which I will also cover, later in this article.

2017-2021: the great rewrite
============================

Initial work, and why
---------------------

While Libreboot was a member of the GNU project, I did a thought experiment:
what if Libreboot's build system and general infrastructure *did* adhere to
GNU standards?

I attempted to answer this, by actually doing it. I commissioned work, on the
Libreboot mailing list (which existed at the time, and was hosted by GNU), to
convert the website's static HTML files. Work was underway for converting the
entire documentation to Texinfo files, GNU's preferred format for documents.
This was later scrapped, when I decided to accept Alyssa's work instead; she
converted the website to use Markdown instead, with a custom static site
generator.

Paper build system
------------------

I simultaneously commissioned a re-write of the build system. There wasn't
anything seriously wrong with the one I wrote, but I wanted to see if it could
be done better, so I went along with this. Paul Kocialkowski began the work.
Paul was at that time a Libreboot developer. He is listed on
the [contrib page](../contrib.md).

Paul's build system, the so-called *Paper build system*, was provided by him as
a proof of concept. It initially only supported CrOS-based devices, for example
the ASUS Chromebook C201, integrating coreboot, Depthcharge and various
ChromeOS utils that were needed.

The goal of the build system re-write was to make Libreboot much more flexible
and generally more configurable. Libreboot's build system *worked* very well at
that time, but a lot of functionalities were hardcoded; the entire design was
basically geared towards providing a useful sane default configuration per
board, in the quickest way possible, so as to provide releases for end users.
Reconfiguration *required* code modification. It was basically similar to
the *suckless* design philosophy. 

I was initially impressed by Paul's work. He got a proof of concept done in
only a few months, writing thousands and thousands of lines of code. Indeed,
his build system design was much more complex. Too complex, but its flaws
would not be realised until later.

All development history on *Paper* can be found in the *old* pre-2021 Libreboot
git repository, here (roll back by a few commits to see the code, because the
code was nuked in the last commits, adding a notice that the repository had
been split into multiple smaller repositories):
<https://notabug.org/libreboot/obsolete-repository-preserved-for-historical-purposes/>

I keep that repository there for archival, but it is no longer developed. I
took over the project again in 2021, and scrapped the rewrite. More on this
later in the article!

Andrew Robbins and Sebastian Grzywna
------------------------------------

Sebastian had joined the project during early 2016, advising about hardware
and he made quite a few useful code contributions at first. For example, he
added support for 16MB IFD configurations in ich9gen.

Some time around mid-2017, another person named Andrew Robbins joined the
Libreboot project. His ambition was to expand upon Paul's work in the Paper
build system, adding support for x86 machines.

As we discovered very early on, the *Paper* design was very, very complex and
required a lot more heavy maintenance than the original Libreboot build system.
The Paper design was the antithesis of the original Libreboot design (now
named lbmk, but back then it was just called *the old libreboot build system*).

The *Paper* design was implemented with the assumption: the user must be able
to reconfigure absolutely anything, without ever touching code. Sort of like
when you have a game engine, and then a scripting engine and editors, and the
like, in videogame development. Everything completely modularised, where one
component could work independently of the other. If I had to make an analogy,
it was sort of like the monolith vs microkernel argument, paper being the
same sort of mentality for the latter.

I was AWOL for years
--------------------

I wasn't active in the project during these years, at all. I first was prepping
mentally and financially for gender reassignment surgery scheduled for late
August 2018; then I spent a year recovering from that. And lots of other things.
A lot of events, most/all of which won't be covered in detail here, were going
on in my life, such that I never had the time nor mental energy to get involved
in Libreboot. And then the COVID pandemic threw me off for a further year. I
was planning a takeover of Libreboot in early 2020, but ended up doing it
in 2021 instead. I had discussed the possibility publicly, several times
during 2020, but nobody took me seriously at the time.

During my hiatus, I did still keep up to date with developments in the project.
I occasionally engaged in code review, helping out where I could, but I wasn't
in charge. One of the problems I had during this period, was that the other
people I put in charge were regularly hostile to my ideas, and seemingly did
not want my help at all. They wanted to maintain everything themselves, their
way. Which, fair enough, and for a while they did actually do a lot of work.
Good work, even. The problem was not their competence, or passion, both of which
they had in abundance, but the build system design that they were working on
was inherently unmaintainable; to put it most succinctly, it was crap. But they
wanted to do that, and I wasn't ready to fully take over again, so I left them
to it, hoping they'd prove me wrong.

When I stepped down, the project had adapted a formalised "democratic"
governance policy, implementing a horizontal hierarchy form of collective
management. In practise, the former BDFL leadership under me was replaced
by basically the same thing, only it was two people; Andrew and Sebastian
called all the shots. They would regularly turn away code contributions, and
Sebastian in particular was often extremely rude to users on the IRC channel,
acting in a very elitist manner.

Another general problem that Sebastian's leadership had was, that everything
was always *later*. You want X new feature added? Wait until after next release.
When's the next release? Soon. That account of events is quite reductive, but
it more or less sums everything up perfectly. The 2017-2021 leadership under
Andrew and Sebastian had no focus. It was overly ambitious, trying to focus on
and perfect everything, but the scope of the work required at least 5 developers
not 2, but those extra 3 developers weren't welcome in the project. They tried
to control everything themselves. It was their Libreboot. They were trying to
do what I do: lead a project. But they weren't competent at leading it. The
total lack of releases during that time is evidence of it. I provided them with
all the infrastructure they needed, funding too (from my own pocket), they had
an existing prestige (Libreboot was and still is very popular) to fall behind,
all they had to do was finish their work. They never finished it, because the
design of the Paper build system was unworkable.

But that's how it all was, for many years. I regard Libreboot as having been
a *dead project*, during this period. All (*all*) of the work put into it at
that time, was a complete waste of energy and effort.

Paper never worked
------------------

The rewrite largely failed. During 2017-2021, Libreboot no longer had any
releases. The Paper build system *never* reliably built any ROM images, due
to its design; it wasn't actually designed to build anything on its own. The
whole point of it was to provide a large framework for *other* people to make
their own configs, in any number of permutations, on whatever hardware they
liked, with many different payloads and machines supported.

In other words, they were re-creating the coreboot build system. Poorly. The
sad thing is that, in retrospect, those two could have helped coreboot
directly, working on its own build system. Many of the features they worked on
would have been suitable to upstream, and *all* coreboot distros (not just
Libreboot) could have benefited, but I digress.

It was an extremely complex design. The *old* build system was still provided,
by the script named `oldbuild` and the directory named `resources/` - if I
remove those in a branch, and then run `sloccount .` (using David Wheeler's
sloccount utility), I see:

```
SLOC	Directory	SLOC-by-Language (Sorted)
7874    tools           sh=7874
5343    projects        sh=3278,ansic=2065
2359    libs            sh=2359
472     www             ansic=369,sh=103
282     top_dir         sh=282
```

In total, 13896 of shell scripts and several thousand lines of C for various
utils (most of the C sloccount is ich9utils).

If you actually look at the Paper system, almost all of it is covering
utilities that don't need to be included in the project, many of them
ChromeOS-related; modern Libreboot (using my design, the lbmk build system),
uses U-Boot, courtesy of work done by Alper Nebi Yasak (more on this later).
I compile U-Boot with the *same* generic script that I maintain, which is
less than 300 sloc in size, and compiles SeaBIOS, coreboot and U-Boot, without
any project-specific logic for the most part, and it doesn't just clean. It
also configures, updates configs, fetches, patches... it does it all.

For comparison, here is *modern* lbmk (the current Libreboot build system
today on 12 December 2023):

```
SLOC	Directory	SLOC-by-Language (Sorted)
1410    script          sh=1410
1007    util            ansic=601,python=406
321     include         sh=321
127     top_dir         sh=127
0       config          (none)
```

I will write more about *lbmk* later in the article, but what you need to
know for now is: lbmk supports more boards than Paper (a lot more), and actually
does a lot *more*, but the design is extremely efficient. The *Paper* design
results in an extreme amount of code repetition, where each module (e.g.
packaged util) is handled by scripts conforming to a uniform design, but each
script is tweaked per task. On the one hand, that offers Paper some flexibility
but a project like Libreboot is only ever managed by a few people, and the
Paper design was very overwhelming to new contributors.

Actually, I won't write much about lbmk at all. You can just read the
[lbmk documentation](../docs/maintain/). Paper also has in excess of 100
scripts. The lbmk design, at least on 12 December 2023, is currently 12
scripts. Just 12, but don't be fooled by simplicity. It can do everything
Paper can.

The lbmk design is so light because it generalises everything as much as
possible. The lbmk design is about 1800 lines of shell script and a couple
hundred lines of C; ich9utils is no longer included, because lbmk instead
includes the ifd/gbe configs generated by it, directly, and many other utils
are now handled (downloaded, patched and compiled) by the shell scripts. So,
the modern lbmk design does/can do everything Paper does/can do, but in 90%
fewer lines of code.

This sloccount comparison is valid, comparing Paper from 2021 (I ended all
development of it in 2021), versus lbmk in December 2023. I saw as early
as *2017*, when Paper was in very early development stages, that the design
was completely unworkable due to complexity, versus the scope of the project
which is to provide firmware images for end users.

I was going to scrap Paper in 2017, and revive my work on the original design,
but as I said: I had other real-life concerns going on, and had to go on
hiatus for many years. I let development of Paper continue during all those
years, in the hope that it would be stabilised at some point, and I had intended
to take it over myself at some point; but it was too complex.

I would later take over the Libreboot project. This is what I will cover,
in the next sections. Paul stopped working on Libreboot after around
late 2017, leaving the work solely in the hands of Andrew and Sebastian.

late 2020: osboot
================

I started the [osboot project](https://notabug.org/osboot) in December 2020.
Check *osboot.org* on the Wayback Machine. Osboot was initially called
Retroboot, but soon renamed to osboot, so also check *retroboot.org* on the
wayback machine.

Osboot started as an experiment: what if Libreboot hardware support could be
greatly expanded, by adopting a more pragmatic policy? That was answered, with
the [Binary Blob Reduction Policy](policy.md) - today, that is the Libreboot
policy, since osboot later merged with Libreboot, in November of 2022, but it's
the same policy that osboot used.

I was commissioned by a Minifree customer to provide a ThinkPad X230. I already
knew then that the X230 (an Ivy Bridge platform) could boot entirely blob-free
in coreboot, except for the neutered Intel ME (using `me_cleaner`) and
microcode updates. To my mind, it seemed acceptable in terms of software
freedom. A solid, all-round very useful machine.

I had a problem: what firmware would I provide? Skulls? Heads? This customer
wanted something easy. Skulls is great but lacks a build system as advanced
as Libreboot's (Paper *or* lbmk), though it does have one that is reminiscent
of ours, and they standardize on SeaBIOS. They didn't (and still don't) have
very good documentation, in my view. Then there is Heads: an excellent
project, but quite excessive for this customer's needs. In fact, the customer
specifically wanted *UEFI* at that time.

I decided to fork the Libreboot 20160907 build system, during December 2020,
for this customer. The 20160907 build system had many flaws, and it was 4 years
unmaintained at that point; the Paper build system was nominally still in
development, and the official build system of Libreboot, but not developed by
myself. Although I understood the Paper design well, I didn't like the code.
I still hate it. I *hate* that design, passionately. I wanted something clean,
and efficient.

Thus, osboot was born. It initially began with Tianocore integrated in it,
using MrChromebox's branch for coreboot. MrChromebox is a coreboot distro that
provides Tianocore as a payload, on many Chromebooks, so I leaned on his
expertise to provide experimental Tianocore support, in my Libreboot 20160907
fork. I completely gutted about half of the build system in that Libreboot
release, when forking it, because most of it no longer worked for modern
upstreams like coreboot and GRUB, both of which had gone through massive
changes over the years.

One of Libreboot's earlier design flaws was that parts of the build system
ran completely standalone, while relying on work done by other parts of the
build system, *while not* checking automatically whether other steps had been
done. For example, the final preparation of a ROM image did not check whether
GRUB had been built. So you had to *know* the build system well, and know which
parts of it to run, and in what precise order. The Libreboot documentation
used to cover this, telling you how to use it in different ways, depending
on the desired configuration. *This was fixed*, very early on in the osboot
project.

Osboot greatly improved the configurability of everything. For example, it
enabled you to more easily mix and match different payload combinations per
mainboard, whereas the Libreboot 20160907 design only allowed *one* payload
type, per target, and it contained a lot of target-specific logic that was
hardcoded, baked into the build system's design - even in December 2020 when
osboot started, I envisioned that it would one day support many more boards,
whereas Libreboot only supported like 15 mainboards in 2016.

The osboot redesign, relative to Libreboot 20160907, made handling of source
tree revisions and patches much cleaner, especially for multi-tree projects
like coreboot, where multiple revisions could be used depending on mainboard.

Of course, the first osboot revision also updated to a modern coreboot
revision at that time, which (in that month, December 2020) was
coreboot 4.14.

Although I only did osboot initially for the X230, for a customer, it took
weeks of work to get the build system up to date, and I spent time updating
all of the documentation too. At that point, I realised what I had *actually*
done: I had gotten back into development again. Moreover, I found the experience
fun again, and I found that I once again had the energy.

In short, I had my mojo back. My then 4-year hiatus was over.

December 2020 Libreboot takeover
--------------------------------

Perhaps getting too carried away too soon, I actually took over the Libreboot
project again in late December 2020. I was rapidly working on adding all the
Libreboot boards to osboot, and I would have just very quickly updated the
deblob scripts; I acted on this desire too soon, running under the gun.

I actually did remove Sebastian and Andrew's access to the Libreboot
infrastructure, for a few hours, before re-instating them - I wasn't ready for
a Libreboot takeover yet. I needed more time to polish everything. Doing a
tiny release for 1 customer, on 1 machine (the X230) was all well and good, but
I decided that I had time to polish it more.

March 2021 Libreboot takeover
-----------------------------

I wanted to get rid of Sebastian and Andrew for some time, at that point. Too
many years had gone by, without any releases in Libreboot, and the Paper build
system was only growing more complex; it was completely unworkable, and their
time was up. They failed. An unwritten rule in the new constitution of 2017
was that they would *competently* run the project; I entrusted this to them,
in that year. They failed, miserably. Despite their clear passion and desire
to do good for the project, they were adamant.

I had tried to sell to them the idea of scrapping the Paper build system (the
re-write), instead opting for my cleanly revived build system based on Libreboot
20160907, which at that time was called *osbmk* (osboot make). They would have
worked under me on it. They refused this, but asserted that Libreboot would have
two projects within it: one run by me, using my newly updated design, and one
with theirs. Now, I ask: why should I accept/enable the authority of those who
clearly had none? I was at a point then that I knew my work was viable, and that
I would have a release soon.

I'd had too many arguments with them over the years, largely technical in
nature. They regularly derided my own work, even the improved build system
design and all the rapid early progress I'd already made with the new osboot
project; I actually did make some temporary releases of osboot (tarballs, with
ROM images and source code) in December 2020, but deleted them, because they
weren't intended for general use. I was only testing everything.

Sebastian had a lot of knowledge about hardware, but did almost no coding
himself; he left that all to Andrew. And Andrew hadn't done any substantial
work in over 6 months at that time. And the work that was done, was still far
from complete. I anticipated that there would be years left before the Paper
design would yield a stable release, so I came to the conclusion:

I should not carry around so much baggage. I had a clean new design, that worked.

So I removed all their access to everything, and took over the Libreboot
project. Naturally, they both started denouncing me, but it didn't matter: I
was in charge. I was (and still am) grateful for their efforts, but Libreboot
must have stable releases, and there must be a clear direction. Having two
projects within it would only confuse people, and I was already addressing many
of the previous flaws in my design, fixing them one by one.

However, I only had osboot then. I started actually working on a new Libreboot
release *after* I took over.

2021 (lib)reboot
===============

New Libreboot repositories
--------------------------

The original Libreboot git repository can be found here:
<https://notabug.org/libreboot/obsolete-repository-preserved-for-historical-purposes>
(if this link ever goes offline, I'll mirror that repository to another git
site, or self-host it)

From mid-2021 onward, the Libreboot project was revived. The original repository,
linked above, contained the build system, documentation and images, along with
the *static site generator* that generates the Libreboot website (from Markdown
files). All in the same repository.

In mid-2021, Libreboot was split into smaller repositories:

* `lbmk`: the build system
* `lbwww`: the website (markdown files)
* `lbww-img`: images
* various other repositories, containing random utilities
* `untitled`: the static site generator, which creates the website, by creating
  HTML files from the Markdown files in `lbwww`

Untitled Static Site Generator
------------------------------

Untitled Static Site Generator was going to be part of Libreboot officially, but
by that time, I had forked the Libreboot static site generator many times, for
other websites that I also host. Therefore, the static site generator was split
into its own standalone project, independent of Libreboot. It is
hosted [here](https://untitled.vimuser.org/). It combines all of the features
of the forks, and it can handle many different websites simultaneously. Many
changes were made, to make Untitled more reliable and user-friendly than the
original scripts. The *original* static site generator, that Untitled was
forked from, was submitted to the Libreboot project by Alyssa Rosenzweig
in 2017.

The osboot project greatly expanded, during this time. It never made any
releases officially, but it provided an excellent proof of concept, and it
became the basis for modern day Libreboot.

May 2021 Libreboot release
--------------------------

Somewhat annoyingly, it coincided with the Freenode/Libera drama at that time,
when the latter forked from Freenode after a hostile takeover. Thankfully, that
drama ended quickly and we ended up with Libera being the clear winner.

Anyway: I finally did get a new Libreboot release out, based on the work that
I had started in osboot, but at that time still complying with the GNU Free
System Distribution Guidelines, like 2016 Libreboot did.

I did not use any of the work in the *Paper* re-write. I used precisely zero
lines of code from Sebastian and Andrew's work. I did it all myself. My decision
to take over the project had been vindicated. I did it for the users. People
had been complaining for years about the lack of a release. The Libreboot
project was dead. A joke to everyone, and it was no longer my fault; it was
theirs, for utterly failing to do any releases, and for running it into the
ground.

I still feel anger to this day, about my own failure. I should have never stepped
down, in 2017. I should have stuck it out, and carried on my work. There are
many works that I and others are completing today, that would have been
done *then*. Alas, hindsight is 20/20.

The [Libreboot 20210522 release](libreboot20210522.md) was the first release
in about 5 years, at that point, and it added many new boards. It inherited all
of the massive build system design improvements from osboot.

Osboot from 2021-2022
====================

The *osboot* project continued, since December 2020 when it started. I started
adding many new boards to it. The purpose of Osboot was the same as Libreboot,
except that it had the [Binary Blob Reduction Policy](policy.md) that Libreboot
now uses, but back then, Libreboot adhered to GNU FSDG.

Goals of osboot
---------------

I *wanted* to start a project like osboot much earlier, in 2017. In fact, I was
going to, but real life got in the way and I went on hiatus for a few years.
I concluded as early as 2017 that the FSDG policy was a liability, especially
after `me_cleaner` became available. I realised that there were many more
machines out there, that I then considered acceptable from a software freedom
perspective, even if they did not comply with FSF RYF or GNU FSDG; I regard
the FSF policy as overly dogmatic, and I've always thought so, but in practise
it didn't hurt anything because Intel ME was always a problem. I didn't know
ME neutering was possible, until I found out about `me_cleaner` - I would never
provide anyone with a setup that uses a non-neutered ME, because of the networking
and backdoors provided in such setups. The `me_cleaner` project removes such
backdoors from the Intel ME, resulting in a clean image that only contains the
init firmware in the ME. In this configuration, the ME initialises itself but
doesn't actually run anything, so it just sits there permanently in the init
stage. Things like AMT no longer work, when you run `me_cleaner`.

To put it simply: at least on the Intel side, `me_cleaner` changed everything
and opened up a lot more machines for me. But to do that, I had to abandon
Libreboot policy. Hence, osboot was born. Libreboot policy was a liability to
the free software movement, because it limited the amount of free software that
people could easily use. Remember, nothing else as easy to use as Libreboot
existed, within the coreboot community. I saw that many people have machines
which *can* have most of the proprietary firmware replaced with free software,
namely coreboot, but Libreboot set very arbitrary limits on what boards I could
add. These restrictions *became* a liability to the project.

The plan therefore was to modify Libreboot policy, and adapt to this new
reality, but I wasn't really sure, and at that time I wasn't sure whether my
work would succeed; this is why I created a separate project, rather than
directly taking back over Libreboot from the start. To my surprise, osboot
started becoming popular within my communities, early on, so I kept it going
for another 2 years or so, to see how it would go.

The feedback I kept getting was that most people saw essentially no difference
between in and Libreboot, except that Libreboot had a bunch of limitations in
it preventing people from using more hardware. People often got confused, asking
what differs between the two projects. I decided later that they would merge.

The purpose of osboot was then to support *every* board from coreboot, which is
more challenging, especially when dealing with code from the vendor that often
must be added, in different ways depending on the machine.

At first, osboot was very hands-on. For example, you had to dump the original
vendor BIOS to extract Intel ME, to then run `me_cleaner`, extracting the IFD,
GBE and (neutered) ME region with *ifdtool* to then insert into the ROM image.
Nowadays, that is completely [automated](../docs/install/ivy_has_common.md),
based on initial work done in osboot by Caleb La Grange. Caleb adapted logic
from Heads that extracts Intel ME images from Lenovo UEFI firmware updates,
thus eliminating the need for vendor firmware dumps prior to flashing; though,
backing up the factory firmware is still recommended, on any mainboard.

I later expanded Caleb's work, making the logic much more generic, expandable
more easily to other boards/vendors and platforms. I also added support for
other files such as Intel MRC firmware and SMSC KBC1126 EC firmware (KBC1126 EC
firmware extraction was only done in Libreboot, after it merged with osboot -
more on this later)

November 2022: osboot/libreboot merger
-------------

I *shut* down the osboot project, formerly hosted on *osboot.org*, during
November 2022. The website was redirected to Libreboot. I then added all
extra documentation and code from osboot, into Libreboot, thus merging the
two projects together, and Libreboot formally adopted osboot's [Binary Blob
Reduction Policy](policy.md). I concluded that the two projects were essentially
the same, and I'd decided during the two years of osboot's existence that it
was vastly superior to Libreboot. I had a lot more fun working on it. Libreboot
became a side hobby at that point. OSBoot was my primary focus.

This was a resounding success. It was done in a day. Caleb adapted the
documentation, while I worked on the build system. *We did it in a day*.

My efforts in osboot and my extensive research revealed to me that almost
everyone supported this move. Sure enough, I saw a relative lack of opposition
to it; though, some of the more dogmatic members of the FSF were quite upset.
This level of upset later caused.... well, that's what I'm going to cover next.

GNU Boot
========

The purpose of today's article has been to write a rigorous history section for
the Libreboot project, because a lot of earlier history for the project wasn't
available. Many of Libreboot's early years were turbulent, and I never expected
then that the project would last 5 years, let alone 10.

Initial hostile fork
--------------------

During Libreplanet 2023, which is the FSF's annual conference, the FSF, through
Denis Carikli who is part of their inner circle, announced a *hostile fork* of
Libreboot. I anticipated a fork of Libreboot by the FSF, as a result of the
osboot merger, and I was OK with it, but:

They tried to steal the name *Libreboot*, and sell themselves as the real
Libreboot project. This, I could not tolerate. I already knew of their effort
in December 2022, because its existence was leaked to me; they asked all of the
people I'd worked with to that point, asking them to betray me and work for them
instead. None were interested, and one of them leaked it to me.

So I was prepared. I expected they'd announce it during Libreplanet and I was
right; Denis had a talk scheduled for 19 March 2023, a Sunday, about boot
firmware, though the fork wasn't announced until he spoke, in the talk. But I
knew. So I prepared.

I released [Libreboot 20230319](libreboot20230319.md), several hours before
his talk, and I started an aggressive *countercoup*, whereby Libreboot was
developed much more aggressively than ever before, to completely outcompete them
in every way. It worked. What's more, I did the unthinkable: I got them to back
down. That almost never happens, as the FSF tends to be extremely dogmatic, too
drunk on their own prestige; set in their ways.

They initially hosted their project on the official sourcehut instance run by
Drew DeVault. I simply asked Drew to terminate their hosting. He complied. He
gave them two weeks to rename their project, or be deleted, and they did not
rename. Their website was hosted on sourcehut at the time, so their website
went offline for a day; on that same day, I announced the [Libreboot
20230423 release](libreboot20230423.md). Drew's assessment, matching my own,
was that it would be inappropriate to host a hostile same-named fork of an
active project. *I* now own access to <https://sr.ht/~libreboot/>, at least
on 12 December 2023, and I even pay for it, though it is currently empty - I may
very well use at a later date, to provide *mailing lists* for Libreboot.

If you run `whois` on libreboot.at (the domain name of their original fork site),
you will see that it says *GNU Hostmaster*. Owned by the FSF. Same config as
used for several other domains used by GNU projects - they were going to make
another *GNU Libreboot*, against my will. This, in spite of the truce established
in 2017.

I don't feel bad about what I did. What they did is widely considered to be
a *dick move* in the free software movement; it is widely considered impolite
to fork an active project and use the same name. The unwritten rule is always
that you use a new name. It's more than that though: in their initial fork, and
also in GNU Boot, they didn't just say: this is what we are, what we do and why
you should use our product. No. They put a paragraph in their documentation,
urging people to *delete* links to libreboot.org, and link to them. *They were
out for blood*.

Fork attempt 2: GNU Boot
------------------------

So I've responded in kind, ever since. Regardless of whether they succeed or
whether they are competent, a thought exists in their head. A dream, you could
say. Their dream is a world in which Leah Rowe and Libreboot no longer exist.
They wanted to destroy me. It's evident in Denis's LP2023 talk, where he said
he wanted to "continue" the Libreboot project. In his mind, there is no room for
disagreement over policy; it's FSDG or nothing. I had to play by their rules,
or go home.

During that time, and subsequently, I and others had repeatedly put pressure
on them to rename. I personally came up with the name *GNU Boot* - and suggested
that they use it. It's a name that I myself came up with several years prior,
when I was considering whether to work for GNU again *myself*, but as an actual
fork of coreboot. The name just works.

They did rename, to GNU Boot, but only after I forced them to do so. I forced
them to do so, by exposing the moral bankrupcy on their part, in their initial
effort to steal the Libreboot name.

On this day, GNU Boot 0.1 RC3 was imminent for release, on this day, and it
was still based largely on Libreboot 20220710, with only superficial changes on
top of it. it still has all the old, obsolete revisions for all projects,
including coreboot. It still has all of the same bugs, that Libreboot has since
fixed, especially during 2023. Libreboot is *vastly* superior, in every way.

Unlike with their first attempt, GNU Boot is fully hosted on the GNU Savannah
infrastructure, as any proper GNU project should be. I *respect* the GNU Boot
project more, because it is its own thing, that doesn't try to ride off of my
coattails. However, my perception of them is permanently coloured by their
initial hostile actions; and the only reason they ceased such actions was
because I made it clear that they would not be allowed. The fact that they even
tried, means they thought I would roll over, or otherwise fail to counteract it
meaningfully. They still want to damage Libreboot.

So, my strategy has been to constantly develop Libreboot from now on, much
more aggressively, and generally stay on top of my game. And I made no secret
of this strategy; I've been pretty open about everything, throughout 2023.

Countercoup
-----------

My countercoup has essentially consisted of a single strategy: be the best, on
a technical level. During all of 2023, roughly 5x as much work has gone into
Libreboot compared to any other average development year (2017-2021
notwithstanding). Essentially, the *FSF's* strategy was to overwhelm Libreboot;
they wanted to make a big splash about their fork, and get devs on board as
quickly as possible, before Libreboot could develop much further under the new
policy, because Libreboot had not yet fully asserted itself in this regard, at
least so far as public recognition was concerned. So I doubled, tripled
and quadrupled down, and maintained absolute laser focus from 19 March 2023
onward, a focus that I still maintain to this day - I have many plans for
Libreboot. If you think 2023 has been crazy, 2024 will be even better. 2024
will be Libreboot's biggest development year yet. 2023 was only a warmup.

I've done *three* major audits to the Libreboot build system, during 2023.
The build system has been *re-engineered*, 3 times, each time becoming
infinitely more efficient.

Many new boards have been added. Many new features. *Non-coreboot* firmware
is now supported; for example, the (libre) stm32-vserprog and pico-serprog
code is now used by Libreboot, to provide serprog firmware on many STM32-
and RP2040-based microcontroller boards; we use them as SPI flashers, but you
can use them for many other purposes. They're quite handy little machines. The
serprog firmware integration was done by Riku Viitanen, who also added many
HP EliteBook machines to Libreboot during 2023.

Thanks to the work done by Nicholas Chin, several Dell Latitude laptops are now
supported in Libreboot, which can be flashed without disassembly. We support
GM45 and Ivy Bridge models, and we're adding many more (we have identified
about 20 of them).

You can actually just read the Libreboot release announcements from 2023, if
you want to know about all of the rapid progress made in Libreboot this year.
It is quite simply impossible to adequately describe, in only a short few
paragraphs, just how much Libreboot has improved during 2023. The development
pace during all of 2023 has been completely insane. Here are all of the
Libreboot release announcements from 2023:

* [Libreboot 20230319](libreboot20230319.md)
* [Libreboot 20230413](libreboot20230413.md)
* [Libreboot 20230423](libreboot20230423.md)
* [Libreboot 20230625](libreboot20230625.md)
* [Libreboot 20231021](libreboot20231021.md)
* [Libreboot 20231101](libreboot20231101.md)
* [Libreboot 20231106](libreboot20231106.md)

I also previously wrote about each of the three audits during 2023:

* [Libreboot Build System Audit 1](audit.md)
* [Libreboot Build System Audit 2](audit2.md)
* [Libreboot Build System Audit 3](audit3.md)

and now:

Canoeboot
---------

Purely for my own entertainment, I decided to re-create FSDG Libreboot *myself*.
FSDG is the policy that GNU Boot uses, that Libreboot previously used, before
it adopted the modern [Binary Blob Reduction Policy](policy.md) - GNU Boot
started, specifically because it opposed the new policy in Libreboot.

Well, GNU Boot seemed to be going nowhere fast. I monitor their Git activity
daily, and their development pace is much slower than mine; slower than mine,
even when I'm going slow. I thought to myself: what if a *competently*
engineered solution existed, like GNU Boot but not?

And thus, [Canoeboot](https://canoeboot.org/) was born. I still mainly develop
Libreboot, but I spend a few hours after each release, bringing Canoeboot up
to date and running the deblob scripts, to update the `blob.list` files in
its build system.

Canoeboot is even listed on the FSF's
[Free Software Directory](https://directory.fsf.org/wiki/Canoeboot) - Craig
Topham approved it, he's the FSF's current licensing and compliance manager,
at least on 12 December 2023.

The purpose of Canoeboot is to simply exist, complying with GNU Boot policy
while being superior to it in every way, outcompeting it so fast that the
GNU Boot project is constantly behind - it's done, specifically to demonstrate
the superiority of Libreboot policy, by showing what Libreboot *would have
been*, if it didn't adopt the new policy.

The FSF failed in its coup. My countercoup was a success. I madly beat them at
their own game. The FSF's strategy *might* have worked, if I hadn't been so
vigilant; Libreboot's development pace was much more conservative at that point,
and most of the works that have now been completed or are now underway, were
not even started. Libreboot was very young into its existence, relative to
the merging of the osboot project. They probably didn't expect any of the
actions that I've taken, or the massive leapfrog year of development this has
been for Libreboot. As far as I'm concerned, Libreboot has *won* 2023 - 2024
is the next battle.

And I *will* maintain Canoeboot. It is currently completely in sync with the
latest Libreboot release, and it will *keep* staying in sync, relative to each
new Libreboot release. I actually *describe* how this syncing is done, in great
detail, on Canoeboot's [about page](https://canoeboot.org/about.html) - and
the first Canoeboot release was done, based on the latest Libreboot release at
that time, in only 2 days, with all of Libreboot's vast improvements in it
compared to GNU Boot. As of this day, 12 December 2023, Canoeboot is about 1
year ahead of GNU Boot in terms of code development, and 2 years ahead on the
writing of documentation. Conversely, GNU Boot is 1 year and 2 years out of
date, in terms of code and documentation respectively.

2024 reconciliation intentions
==============================

The *FSF* started the coldboot war. Libreboot merely won it.

From 2024 onward, unless more hostilities develop from FSF/GNU's side, I intend
to adopt a more conciliatory approach toward GNU Boot. I won the battle of 2023.
I won the *cold boot war*, but the real battle is this: how do we get free boot
firmware to non-technical end users, efficiently and reliably? The answer to
that question is projects such as Libreboot, or indeed others like GNU Boot,
Heads, Skulls, MrChromebox... you name it. Distros, designed similarly to
Linux distros, but for building boot firmware instead.

Much of 2023 was spent counteracting the FSF's coup, because they were hostile
to the Libreboot project, but I decided that I will avoid any such counter
action from now on. I will stil develop Canoeboot, but my main focus is
Libreboot. My conclusion is that, so long as my own efforts exist, and I keep
working on everything, the GNU Boot project is no threat to Libreboot whatsoever.

Towards the end of 2023, there *was* in fact cooperation, between the GNU Boot
and Libreboot projects, in the form of small patches; Denis Carikli sent a few
patches and reports to Canoeboot and the Untitled Static Site Generator, and I
did similar for the GNU boot project. The FSF themselves even decided to
accept Canoeboot, on their Free Software Directory. See:
<https://directory.fsf.org/wiki/Canoeboot>

My only issue with GNU Boot at the start of 2023 was that they wanted
to *replace* the Libreboot project, by using the same name. They *did* try to
destroy the Libreboot project, and take it for themselves. Things pretty much
calmed towards the end of 2023, and now the two projects/communities operate
to their own ends, not taking much stock of the other. If they don't bother me
from now on, I won't pay any attention to them.

They are welcome to send me patches, and I *may* help them if I feel like it.

Aside from remarks made on *this* page, which are necessary for historical
context, neither Libreboot nor Canoeboot aggressively act against the FSF
anymore; to do so was necessary, when they themselves did the same, because
the FSF is a well-funded organisation with much bigger reach and would walk
all over me if I allowed it, so it was necessary to show strength.

However, throughout 2024, GNU Boot has essentially been a dead project; they
haven't done any work on their build system of any consequence, and haven't
even updated their documentation that heavily. Their main focus was on
integrating the Untitled Static Site Generator into their infrastructure,
which otherwise relies heavily on TexInfo documents and CVS (Untitled relies on
Markdown and Git heavily - the FSF actually made a special rsync server for
GNU Boot to manually upload HTML files to, generated by Untitled, which they
wrapped around directly, within the GNU Boot build system).

Last remarks
============

I've pretty much gone through the entire history, to the best of my ability.
I probably did forget a few things, but these are the broad strokes. If you
managed to read this far, I salute you. In any case, this article describes
both the history and nature of the Libreboot project up to this day, 12
December 2023, marking the 10th anniversary of the Libreboot project, relative
to its first release on 12 December 2013. I *was* planning a new release for
this day, but I decided not to rush that; more testing is needed, and there
are several new features/boards that I and others in the Libreboot project
are working on.

If you made it this far, reading all the way to the end, I will now reward
your patience and your courage with a cool easter egg:

The `minifree.org` domain name initially hosted a website that was teaching
people how to use VPNs and Tor, and it contained information about how to
be private on the internet. I later planned on making it into an FSDG-compliant
fork of *Puppy Linux* - because Puppy is small, lightweight, and mini is another
word for *small*, and it was to be a fully free distribution, containing no
blobs, not even firmware. Minifree GNU/Linux. I later scrapped the plan, and
realised that *Minifree* was also newspeak, that could mean *Ministry of
Freedom*. The domain name was re-purposed to provide my company website, with
the erstwhile *gluglug* domain then redirecting to it, and I registered Minifree
Ltd in the UK. Minifree is how I fund the Libreboot project, by selling computers
with Libreboot pre-installed. You can find it
on [minifree.org](https://minifree.org/).
